package secondStage.part3.List集合;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
 * @ClassName: [ListIteratorDemo]
 * @Description: 列表迭代器
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-02]
 * @Version: [v1.0]
 */
/*ListIterator:列表迭代器
    通过List集合的listIterator()方法得到。所以说它是List集合特有的迭代器
    用于允许程序员沿任一方向遍历列表的列表迭代器，在迭代期间修改列表，并获取列表中迭代器的当前位置
Listlterator中的常用方法
    E next():返回迭代中的下一个元素
    boolean hasNext():如果迭代具有更多元素，则返回true
    E previous():返回列表中的上一个元素
    boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素，则返回true
    void add(E e):将指定的元素插入列表*/
public class ListIteratorDemo {
    public static void main(String[] args) {
        //创建对象
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");

        ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()) {
            String s = lit.next();//这个过程中会将实际修改值赋值给预期修改值，因此不会出现并发修改异常
            if (s.equals("world")) {
                lit.add("javaee");
            }
        }
        System.out.println(list);

        // 以下内容较少使用
        //通过List集合的ListIterator()方法得到
        ListIterator<String> lst = list.listIterator();
        System.out.println("正向遍历：");
        while (lst.hasNext()) {
            String s = lst.next();
            System.out.println(s);
        }
        System.out.println("逆向遍历：");
        while (lst.hasPrevious()) {
            String s = lst.previous();
            System.out.println(s);
        }
    }
}
